import os
import json
from typing import Dict, Any

class ConfigManager:
    """配置管理类"""
    
    def __init__(self, config_file: str = "config.json"):
        """
        初始化配置管理器
        
        Args:
            config_file: 配置文件路径
        """
        self.config_file = config_file
        self.default_config = {
            "api_key": "",
            "base_url": "https://api.moonshot.cn/v1",
            "model": "kimi-k2-0905-preview",
            "temperature": 0.6,
            "max_history": 20,
            "enable_color": True,
            "auto_save": True,
            "save_interval": 10
        }
        self.config = self.default_config.copy()
    
    def load_config(self) -> Dict[str, Any]:
        """
        加载配置文件
        
        Returns:
            配置字典
        """
        if os.path.exists(self.config_file):
            try:
                with open(self.config_file, 'r', encoding='utf-8') as f:
                    loaded_config = json.load(f)
                    # 合并配置，保留默认值
                    self.config.update(loaded_config)
            except (json.JSONDecodeError, IOError) as e:
                print(f"配置文件加载失败: {e}，使用默认配置")
        else:
            print("配置文件不存在，使用默认配置")
        
        return self.config.copy()
    
    def save_config(self, config_data: Dict[str, Any] = None) -> bool:
        """
        保存配置文件
        
        Args:
            config_data: 要保存的配置数据，如果为None则保存当前配置
            
        Returns:
            是否保存成功
        """
        if config_data:
            self.config.update(config_data)
        
        try:
            # 确保目录存在（如果配置文件路径包含目录）
            config_dir = os.path.dirname(self.config_file)
            if config_dir:  # 只有当路径包含目录时才创建
                os.makedirs(config_dir, exist_ok=True)
            
            with open(self.config_file, 'w', encoding='utf-8') as f:
                json.dump(self.config, f, indent=2, ensure_ascii=False)
            return True
        except IOError as e:
            print(f"配置文件保存失败: {e}")
            return False
    
    def get(self, key: str, default: Any = None) -> Any:
        """
        获取配置值
        
        Args:
            key: 配置键
            default: 默认值
            
        Returns:
            配置值
        """
        return self.config.get(key, default)
    
    def set(self, key: str, value: Any) -> None:
        """
        设置配置值
        
        Args:
            key: 配置键
            value: 配置值
        """
        self.config[key] = value
    
    def validate_api_key(self) -> bool:
        """
        验证API密钥是否有效
        
        Returns:
            API密钥是否有效
        """
        api_key = self.get("api_key")
        return bool(api_key and len(api_key) > 10)  # 简单验证
    
    def setup_initial_config(self) -> bool:
        """
        初始配置设置
        
        Returns:
            是否配置成功
        """
        print("=== Kimi终端助手初始配置 ===")
        
        # 检查环境变量中的API密钥
        env_api_key = os.getenv("KIMI_API_KEY")
        if env_api_key:
            print("检测到环境变量中的KIMI_API_KEY")
            self.set("api_key", env_api_key)
        
        # 如果没有API密钥，提示用户输入
        if not self.get("api_key"):
            api_key = input("请输入您的Kimi API密钥（或按回车跳过，稍后设置）: ").strip()
            if api_key:
                self.set("api_key", api_key)
        
        # 保存配置
        if self.save_config():
            print("配置已保存")
            return True
        else:
            print("配置保存失败")
            return False
